Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন যা অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ডিপেনডেন্সি বা নির্ভরশীলতা হ্যান্ডল করতে ব্যবহৃত হয়। এর মাধ্যমে, অ্যাপ্লিকেশন কম্পোনেন্টগুলোর মধ্যে স্বতন্ত্রতা বা loosely coupled সম্পর্ক স্থাপন করা যায়। DI এর মাধ্যমে আমরা একটি ক্লাসের মধ্যে নির্ভরশীল অবজেক্টগুলো সরাসরি তৈরি না করে, সেগুলো বাইরের কোনও সোর্স (যেমন DI কন্টেইনার) থেকে ইনজেক্ট করতে পারি।
DI এর মূল উদ্দেশ্য হল, কোডের রক্ষণাবেক্ষণ এবং টেস্টিংকে সহজ করা, কারণ এর মাধ্যমে কোডের বিভিন্ন অংশ একে অপরের সাথে কম যোগাযোগ রাখে।
ASP.NET Core DI কে প্রথম থেকেই বিল্ট-ইন সাপোর্ট প্রদান করে, তাই আপনাকে বাইরের কোনো লাইব্রেরি বা ফ্রেমওয়ার্ক ব্যবহার করার দরকার নেই। এটি অ্যাপ্লিকেশন স্টার্টআপে কনফিগার করা হয় এবং নির্দিষ্ট সার্ভিসের জন্য ডিপেনডেন্সি ইনজেকশন সেট করা হয়। DI সার্ভিসটি কনফিগার করার জন্য অ্যাপ্লিকেশন এর Startup.cs
ফাইলে সেটআপ করা হয়।
ASP.NET Core অ্যাপ্লিকেশন তৈরি করার সময় DI কনটেইনারটি একটি সার্ভিস রেজিস্ট্রেশন পদ্ধতি প্রদান করে, যেখানে আপনি বিভিন্ন সার্ভিস (যেমন ট্রান্সিয়েন্ট, সিঙ্গলটন, স্কোপড) রেজিস্টার করতে পারেন। এগুলি পরবর্তীতে ইনজেক্ট হয়ে চলতে থাকে।
সার্ভিস রেজিস্ট্রেশনStartup.cs
ফাইলে ConfigureServices
মেথডে সার্ভিস রেজিস্টার করা হয়। এখানে আপনি সার্ভিসগুলিকে বিভিন্ন লাইফটাইম (Transients, Scoped, Singleton) এর মধ্যে রেজিস্টার করতে পারেন।
Service Registration উদাহরণ:
public void ConfigureServices(IServiceCollection services)
{
// Singleton সার্ভিস রেজিস্ট্রেশন
services.AddSingleton<IMyService, MyService>();
// Scoped সার্ভিস রেজিস্ট্রেশন
services.AddScoped<IOrderService, OrderService>();
// Transient সার্ভিস রেজিস্ট্রেশন
services.AddTransient<IProductService, ProductService>();
}
এখানে IMyService
একটি ইন্টারফেস এবং MyService
তার ইমপ্লিমেন্টেশন। AddSingleton
, AddScoped
, AddTransient
মেথডগুলো সার্ভিসের বিভিন্ন লাইফটাইম রেজিস্টার করতে ব্যবহৃত হয়।
একবার সার্ভিস রেজিস্টার করার পর, ASP.NET Core আপনাকে স্বয়ংক্রিয়ভাবে সেগুলো ইনজেক্ট করতে সাহায্য করে। সার্ভিস ইনজেক্ট করার জন্য, কনট্রোলার বা ক্লাসের কনস্ট্রাকটরে সরাসরি সার্ভিসটি ইনজেক্ট করা হয়।
কনট্রোলারে সার্ভিস ইনজেকশন উদাহরণ:
public class HomeController : Controller
{
private readonly IMyService _myService;
// কনস্ট্রাকটরে DI ব্যবহার
public HomeController(IMyService myService)
{
_myService = myService;
}
public IActionResult Index()
{
var result = _myService.GetData();
return View(result);
}
}
এখানে HomeController
-এ IMyService
ইন্টারফেস ইনজেক্ট করা হচ্ছে। ASP.NET Core এটি অটোমেটিক্যালি ইনজেক্ট করবে, কারণ এটি সার্ভিস রেজিস্টার করা হয়েছে ConfigureServices
মেথডে।
ConfigureServices
মেথডে সার্ভিস রেজিস্টার করতে হবে। সার্ভিসগুলোকে ট্রান্সিয়েন্ট, স্কোপড, অথবা সিঙ্গলটন হিসেবে কনফিগার করা হয়।ধরা যাক, আমাদের একটি সার্ভিস আছে যা ব্যবহারকারীর তথ্য রিট্রিভ করার জন্য ব্যবহৃত হয়।
public interface IUserService
{
User GetUser(int id);
}
public class UserService : IUserService
{
public User GetUser(int id)
{
// এখানে ডেটাবেস বা অন্য কোনো সোর্স থেকে ডেটা রিটার্ন করা হবে
return new User { Id = id, Name = "John Doe" };
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IUserService, UserService>();
}
public class UserController : Controller
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
public IActionResult Index(int id)
{
var user = _userService.GetUser(id);
return View(user);
}
}
এখানে, IUserService
ইন্টারফেসটি UserService
ক্লাসের মাধ্যমে বাস্তবায়িত হয়েছে, এবং কনট্রোলারে ইনজেক্ট করা হয়েছে।
সারাংশ
Dependency Injection (DI) ASP.NET Core অ্যাপ্লিকেশনগুলিতে নির্ভরশীলতা ম্যানেজমেন্টের একটি শক্তিশালী টুল। এটি কোডের ক্লিনলিনেস, রক্ষণাবেক্ষণ সহজতা, এবং টেস্টিং সহজ করে তোলে। ASP.NET Core DI সিস্টেম স্বয়ংক্রিয়ভাবে সার্ভিস ইনজেকশন পরিচালনা করে, যা কোডে মডুলারিটি ও স্কেলেবিলিটি আনে।
common.read_more